草庐IT

Java Swingworker 和多线程

全部标签

java - 在java中登录多线程应用程序

在多线程环境中记录日志的最佳方式和工具是什么,以便每个线程都有自己的记录器实例和单独的文件。这甚至可能吗? 最佳答案 您可以尝试使用自定义Log4Jappender,它将线程id作为参数并根据调用它的线程过滤消息。即时创建它,将其附加到记录器。虽然这种方法存在多个问题:过多的appender会减慢日志记录速度AppServer通常有一个线程池。这意味着随着时间的推移,同一个线程将参与执行完全不相关的请求,这些请求将最终出现在同一个日志文件中。我建议您考虑一种更简单的方法:将线程ID记录到同一个日志文件中。它又快又简单,log4j有一

java - 维护拥有大量线程的 Java 应用程序时,我需要了解什么?

背景信息我有一个进行数据分析的分布式处理应用程序。它旨在对实时更新的多组数据进行并行处理。作为设计的一部分,分析已分解为分析节点。每个节点获取源数据并对其进行处理以创建其他数据,然后这些数据又可以被其他节点使用。要对一个数据集进行我们当前的全套分析,需要大约200个节点。在目前的设计中,每个节点都有自己的线程运行。现在,大部分时间这些线程都处于hibernate状态。每当数据更新时,它们都会像瀑布一样轮流醒来,然后又回到sleep状态。该应用程序目前正在生产中运行40组数据,每组需要200个节点,使用8000个线程。当没有数据进来时,服务器上就没有负载。当数据在最繁忙的时候进入时,服务

java - 最终字段和线程安全

为了线程安全,它应该是故意不可变的java类“final”的所有字段(包括超字段),还是没有修饰符方法就足够了?假设我有一个带有非最终字段的POJO,其中所有字段都是某个不可变类的类型。这个POJO有getters-setters和一个设置一些初始值的构造函数。如果我通过删除修饰符方法来扩展此POJO,从而使其不可变,扩展类是否是线程安全的? 最佳答案 为了以线程安全的方式使用不带final字段的有效不可变对象(immutable对象),您需要在初始化后使对象对其他线程可用时使用安全发布习语之一,否则这些线程可以查看处于部分初始化状

java - Camel 是否为每条路线创建一个线程

最近我开始使用camel,我发现它有可能解决我的很多集成层需求。我创建了一个java客户端应用程序(不在任何容器中运行),我在其中定义了两条路由:路线1:将文件从传入的文件夹1移动到文件夹2route2:将文件内容从folderx移动到mq队列。我启动了我的应用程序,这些路由正在执行它们的工作,轮询这些文件夹并相应地路由消息。任何人都可以向我解释路线的工作原理。camel(context)是否为每条路线创建一个线程。到底发生了什么?注意:我在camel网站上找不到关于此的直接注释。 最佳答案 这取决于你在路由中使用的组件,创建和使用

java - 用于线程安全的未绑定(bind)缓存的 ThreadLocal HashMap 与 ConcurrentHashMap

我正在创建具有以下特征的内存缓存:缓存未命中将导致计算和存储一个条目这个计算非常昂贵这个计算是幂等的无限制(条目从未删除)因为:输入的结果最多为500个条目每个存储的条目都非常小缓存的生命周期相对较短(通常不到一个小时)总的来说,内存使用不是问题将有数千次读取-在缓存的生命周期内,我预计99.9%以上的缓存命中率必须是线程安全的什么会有更好的性能,或者在什么条件下一种解决方案优于另一种解决方案?ThreadLocalHashMap:classMyCache{privatestaticclassLocalMyCache{finalMapmap=newHashMap();Vget(Kkey

java - 多线程 - 为什么下面的程序表现得如此奇怪?

类(class)大纲:我们有两个线程(t1和t2)写入一个整数值,然后将写入的值刷新到RAM。另一个线程(t3)检查该值是否与t1或t2写入的值一致,如果不一致,则打印。publicclassContainer{inta;volatilebooleanb;publicstaticvoidmain(String[]args){Containercontainer=newContainer();Threadt1=newThread(){@Overridepublicvoidrun(){for(;;){container.a=409;container.b^=container.b;}}};

java - 当你调用一个线程的 interrupt() 时会发生什么?

我想知道发生了什么它什么时候sleep?当它正在运行时,即它正在执行给定的任务。提前致谢。 最佳答案 中断一个线程是一种状态安全的方式来取消它,但是线程本身必须编写代码来注意中断。如果在该线程执行时发生.interrupt(),则抛出InterruptedException的长阻塞Java操作将抛出该异常。.interrupt()方法为该线程设置“中断”标志并中断任何IO或sleep操作。它不执行任何其他操作,因此由您的程序做出适当响应并定期通过Thread.interrupted()检查其中断标志。如果一个线程不检查中断,它就不能

java - 同步线程和锁定

谁能解释一下这两个例子在对象锁定上下文中的区别:publicvoidmethod1(){synchronized(this){....}}和StringBufferaStringBufferObject=newStringBuffer("A");publicvoidmethod2(){synchronized(aStringBufferObject){....}}我知道第一个示例将获得this实例的锁,第二个将获得aStringBufferObject实例的锁。但我真的不明白两者的作用或区别是什么。例如,在第二个例子中,线程是否仍然能够执行同步块(synchronizedblock)内

java - 如何使用 jstack 查找阻塞线程

使用jstack我得到了一个正在运行的线程树。以下Thread.State的含义是什么:等待TIMED_WAITING可运行tid和nid是什么意思?一个Thread的标题是这样的“事件批处理(SpringUAA/1.0.2)”守护进程prio=10tid=0x0000000041e27800nid=0x363b等待条件[0x00007f9a89267000]如何导航到“等待条件”地址的源代码行 最佳答案 WAITING表示线程正在等待某事。通常您会看到“WAITING(onobjectmonitor)”,这意味着它正在等待noti

java - 调整大小时多线程环境中的 HashMap

我正在学习一个教程,它基本上解释了在多线程环境中调整Hashmap大小时发生竞争条件的原因:InJava,iftwothreadatthesametimefoundthatnowHashMapneedsresizingandtheybothtrytoresizing.ontheprocessofresizingofHashMapinJava,theelementinbucketwhichisstoredinlinkedlistgetreversedinorderduringtheirmigrationtonewbucketbecausejavaHashMapdoesn'tappendt